/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package grest.model;
import java.util.List;
import java.sql.*;
import javax.swing.JOptionPane;

/**
 *
 * @author rodrigo
 */
public class Productos implements Entidad{
    
    private int id;
    private String desc;
    private Double precio;
    private boolean changed;
     private boolean prechanged = false;   
    
    public Productos(){
        this(0,"nulo",1115.37);
    }
    
     public Productos(ResultSet rs) throws SQLException {
        // valores para un nuevo objeto Test
        setIDP(rs.getInt("ID_PRODUCTO"));
        setDesc(rs.getString("DESCRIPCION"));
        setPrecio(rs.getDouble("PRECIO_BASE"));
        setChanged(false);
    }
   
     
     public Productos(int id,String desc,Double precio){
        this.id=id;
        this.desc=desc;
        this.precio=precio;
        setChanged(false);
    }
     
     
     public int getId(){
        return id;
    }
     
     
     public String getDesc(){
        return desc;
    }
     
     public Double getPrecio()
     {
         return precio;
     }
     
     
     /**
     * Establece el numero de producto
     * @param nro 
     */
    public void setIDP(int nro){
        this.id = nro;
        setChanged(true);
    }
    
    
    public void setDesc(String s){
        this.desc = s;
        setChanged(true);
    }
    
    public void setPrecio(Double p){
        if (p > 0) {
           this.precio = p;
           setChanged(true);
        } else {
            this.precio = 1.0;
             JOptionPane.showMessageDialog(null, "Ingr1ese un precio positivo","Error",JOptionPane.WARNING_MESSAGE);
        }

    }
     
      //Implementacion Interfase Entidad
        
    @Override
    public boolean isChanged() {
        return changed;
    }
    
    
    @Override
    public boolean isColumnEditable(int columna){
        switch(columna){
            case 0 : return false;
            case 1 : return true;
            case 2 : return true;
        }
        return false;
    }
    
    @Override
    public void setChanged(boolean f){
        if(!prechanged) changed = f;
    }
    
    
    @Override
    public int getColumnCount(){
        return 3;
    }
    
    
    @Override
    public Class getColumnClass(int c){
        switch(c){
            case 0 : return Integer.class;
            case 1 : return String.class;
            case 2 : return Double.class;
        }
    return null;
    }
    
    @Override
    public String getColumnTitle(int columna){
        switch(columna){
            case 0 : return "ID_PRODUCTO";
            case 1 : return "DESCRIPCION";
            case 2 : return "PRECIO_BASE";
        }
    return null;
    }
    
    
    @Override
    public Object getColumnValue(List<Entidad> e,int row,int col) {
        switch(col) {
            case 0:
                return ((Productos) e.get(row)).getId();
            case 1:
                return ((Productos) e.get(row)).getDesc();
            case 2:
                 return ((Productos) e.get(row)).getPrecio();
        }
        return null;
    }
    
    
    @Override
     public void setColumnValue(List<Entidad> e,int row,int col,Object value) {
        switch(col) {
           case 0:
                ((Productos) e.get(row)).setIDP((Integer) value);
                break;
           case 1:
                ((Productos) e.get(row)).setDesc((String) value);
                break;
           case 2:
                ((Productos) e.get(row)).setPrecio((Double) value);
                break;
        }
     }
    
    @Override
     public void loadTuplas(List<Entidad> tipoEntidad, ResultSet tuplas) throws SQLException{
         tipoEntidad.add(new Productos(tuplas));
     }   
    
    @Override
    public String getSelectQuery(){
        return "select * from t_productos";
    }
     
    @Override
     public String getInsertQuery(){
        return "insert into t_productos values(" + getId() + ",'" + getDesc() + "'," + getPrecio()+")";
     }
     
    @Override
     public String getUpdateQuery(){
        return "update t_productos set descripcion = '" + getDesc() + "', precio_base = " + getPrecio() + " where id_producto = " + getId();
     }
     
    @Override
     public String getDeleteQuery() {
        return "delete from t_productos where id_producto = " + getId();
    }

    @Override
     public void setPreChanged(boolean p){
        prechanged=p;
    }
     
    @Override
    public boolean isPreChanged(){
        return prechanged;
    }

    @Override
    public String onPreInsertQuery() {
        return "SELECT GEN_ID( GN_T_PRODUCTOS, 1 ) FROM RDB$DATABASE";
    }
    @Override
    public void setID(Object value){
       this.id=(Integer)value;
    }
   
}